﻿using System;
using System.Collections.Generic;
using System.Text;
using CeA.Reports.Atendimento.DataAccess.DTO;
using System.Data.OracleClient;
using System.Data;
using IBatisNet.DataMapper;
using CeA.Reports.Atendimento.DataAccess.Criteria;

namespace CeA.Reports.Atendimento.DataAccess.DAO.Oracle {
    public class OracleEspecialistaImpl : Especialista {
        

        public OracleEspecialistaImpl() {
            //m_connection = OracleDAOFactory.CreateConnection();
        }

        /// <summary>
        /// Lista os Especialistas com critério de busca.
        /// </summary>
        /// <returns></returns>
        public List<EspecialistaDTO> ListarIdentificacao(EspecialistaCriteria criteria) {
            IList<EspecialistaDTO> list = Mapper.Instance()
                   .QueryForList<EspecialistaDTO>("especialistaSelectList", criteria);
            return (List<EspecialistaDTO>)list;
        }

        public void Excluir(int id) {
            String listaLojas = checkForExistingLoja(id);
            if (listaLojas != null)
                throw new InvalidOperationException("Há loja com dependencia nesse especialista. Exclua a dependencia com a(s)loja(s):[" + listaLojas + "].");
            
            Mapper.Instance().Delete("especialistaDelete", id);

        }

        private string checkForExistingLoja(int id)
        {
            IList<String> list = Mapper.Instance()
                   .QueryForList<String>("especialistaSelectListLojas", id);

            String listaLojas = null;

            foreach (String row in list)
            {
                listaLojas += row.ToString() + ", ";             
            }

            return listaLojas;
        }


        public EspecialistaDTO Salvar(EspecialistaDTO especialista) {
            int especialistaKey = (int)Mapper.Instance().Insert("especialistaInsert", especialista);
            especialista.Id = especialistaKey;
            //EspecialistaDTO especialista_dto = Mapper.Instance().QueryForObject("selectRegiao", especialistaKey) as EspecialistaDTO;
            return especialista;
        }

        public void Atualizar(EspecialistaDTO especialista) {
            Mapper.Instance().Update("especialistaUpdate", especialista);
        }


    }
}
